Адміністрація вирішила продати даний сайт. За детальною інформацією звертайтесь за адресою: rozrahu@gmail.com

Метод цифрового диференціального аналізатора

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра автоматизованих систем управління

Інформація про роботу

Рік:
2007
Тип роботи:
Лабораторна робота
Предмет:
Комп'ютерна графіка
Група:
КН

Частина тексту файла

Міністерство освіти та науки України Національний університет «Львівська політехніка» Кафедра автоматизованих систем управління  Лабораторна робота №4 з дисципліни «Комп’ютерна графіка» на тему: “Метод цифрового диференціального аналізатора” Мета: Освоїти розкладання відрізка в растр методом цифрового диференціального аналізатора. ТЕОРЕТИЧНІ ОСНОВИ Один з методів розкладання відрізка в растр полягає в розв’язуванні диференціального рівняння, що описує цей процес. Для прямої лінії маємо dy/dx=const чи Dy/Dx=(y2 – y1)/(x2 – x1). Розв’язок представляється у вигляді yi+1=yi+Dy yi+1=yi+Dx(y2 – y1)/(x2 – x1) де x1, x2, y1, y2 – кінці відрізка, що розкладається, yi - початкове значення для чергового кроку вздовж відрізка. Фактично рівняння являє собою рекурентне співвідношення для послідовних значень у вздовж потрібного відрізка. Цей метод, використовуваний для розкладання в растр відрізків, називається цифровим диференціальним аналізатором (ЦДА). У простому ЦДА або Dx, або Dy (більше із збільшень) вибирається як одиниця растра. Нижче наводиться простий алгоритм, що працює у всіх квадрантах: передбачається, що кінці відрізка ( x1, y1) і (x2, y2) не збігаються. Апроксимуємо довжину відрізка: if abs(x2 – x1)>=abs(y2 – y1) then L= abs(x2 – x1) else L= abs(y2 – y1) назначаємо більше із збільшень Dx чи Dy рівним одиниці растра Dx=(x2 – x1)/L Dy=(y2 – y1)/L округляємо величини, а не відкидаємо дробову частину. Використання знакової функції робить алгоритм придатним для всіх квадрантів x=x1 y=y1 Plot(round(x),round(y)) //промалювання пікселі початок основного циклу i=1; while i<=L do begin x=x+Dx y=y+Dy i:=i+1; Plot(round(x),round(y)) End; finish ПОРЯДОК РОБОТИ Побудувати декартову двовимірну систему координат, у якій максимальне значення по осях х і у було би близько 10. Розграфити площину побудови відрізків у вигляді сітки, на якій будуть малюватися пікселі. Побудувати псевдовідрізок, який би з’єднував початок з кінцем відрізку. Привести результат роботи алгоритму накреслення відрізку методом цифрового диференціального аналізатора, у якому би підсвічувалися пікселі, або ж клітинки сітки. Проаналізувати результати. Текст програми unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, Menus, StdCtrls, Buttons; type TForm1 = class(TForm) Bevel1: TBevel; PaintBox1: TPaintBox; BitBtn1: TBitBtn; Label3, Label4, Label5, Label6: TLabel; Label7, Label8, Label9, Label10: TLabel; Label11, Label12, Label13, Label1: TLabel; Label2, Label14: TLabel; ex1, ey1, ex2, ey2: TEdit; Label15, Label16: TLabel; procedure Chusto; procedure Sitka; procedure Tochka(x,y: byte); procedure FiksYryxX(x1,y1,x2,y2: byte); procedure FormCreate(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure PaintBox1Paint(Sender: TObject); private public end; const CP=30;//ціна поділки var Form1: TForm1; x0,y0,w,h,x1,x2,y1,y2: integer; new,draw: Boolean; implementation {$R *.DFM} procedure TForm1.Chusto; begin new:=true; PaintBox1.Repaint; end; procedure TForm1.Sitka; var j: byte; begin with PaintBox1.Canvas do begin Pen.Color:=clGray; for j:=0 to 13 do begin MoveTo(x0+j*CP,y0); LineTo(x0+j*CP,0); MoveTo(x0,y0-j*CP); LineTo(w,y0-j*CP); end; end; end; procedure TForm1.Tochka(x,y: byte); begin with PaintBox1.Canvas do begin Brush.Color:=clGreen; Rectangle(x0+x*CP,y0-(y+1)*CP,x0+(x+1)*CP,y0-y*CP); FloodFill(x0+x*CP+1,y0-(y+1)*CP+1,clGreen,fsBorder); end; end; procedure TForm1.FiksYryxX(x1,y1,x2,y2: byte); var x,y: byte; begin x:=x1; y:=y1; Tochka(x1,y1); while (x<>x2)or(y<>y2) do begin if (x1<=x2)and(x<>x2) then inc(x); if (x1>x2)and(x<>x2) then dec(x); if (y1<=y2)and(y<>y2) then inc(y); if (y1>y2)and(y<>y2) then dec(y); Tochka(x,y); end; end; procedure TForm1.FormCreate(Sender: TObject); begin w:=PaintBox1.Width; x0:=0; h:=PaintBox1.Height; y0:=h; draw:=...
Антиботан аватар за замовчуванням

01.01.1970 03:01

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

Оголошення від адміністратора

Антиботан аватар за замовчуванням

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Новини